/**
 * Created by 白雨浓 on 2018/5/21 17:11.
 *
 * 克隆工具
 */
const clone = {
    /**
     * 对象浅克隆
     * @param obj 对象
     * @param isToString 是否将number型转换为string （主要用于表单）
     * @returns {*}
     */
    simple(obj, isToString) {
        let proto = Object.getPrototypeOf(obj);
        proto = Object.assign({}, Object.create(proto), obj);

        if (!isToString) return proto;
        Object.keys(proto).forEach(key => {
            if (typeof proto[key] === 'number') {
                proto[key] = '' + proto[key];
            }
        });
        return proto;
    },
    /** 全兼容深度克隆 效率低 */
    dep(obj) {
        return JSON.parse(JSON.stringify(obj));
    },
    /** 在ajax后赋值page的值 */
    page(res) {
        return {
            current: res.data.current,
            size: res.data.size,
            total: res.data.total
        }
    },
    /** 将数组中的某个key的string型的value转换为Object */
    toJson(data, ...keys) {
        if (data instanceof Array) {
            for (const item of data) {
                for (const key of keys) {
                    if (item[key])
                        item[key] = JSON.parse(item[key]);
                }
            }
            return data;
        } else {
            for (const key of keys) {
                if (data[key])
                    data[key] = JSON.parse(data[key]);
            }
            return data;
        }
    },
    /** 将数组中的某个key的Object型的value转换为string */
    toString(data, ...keys) {
        for (const item of data) {
            for (const key of keys) {
                item[key] = JSON.stringify(item[key]);
            }
        }
        return data;
    }
};

export default {
    install(Vue) {
        Vue.prototype.$clone = clone;
    }
}
